/*****************************************************************************/
/*                        >>> PPD_CONSOLA.C-- <<<                            */
/*	Trabajo Practico 2do. cuatrimestre 2011                                  */
/*	TP:"FUSELAJE"                                                            */
/*	GRUPO: Reduce Fat Fast                                                   */
/*	INTEGRANTES: Emanuel Genovese                                            */
/*               Federico Gabriel Garcia                                     */
/*               Federico Pioli                                              */
/*               Esther Insfrain                                             */
/*               Luciano Bagattin                                            */
/*	Fecha UM:                                                                */
/*****************************************************************************/
/*****************************************************************************/
/*		        	HEADERS					                                 */
/*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
#include <time.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#include <sys/un.h>
#include <fcntl.h>
#include <errno.h>
#include "func_socket.h"
#include "log.h"
#include "../headers/func_pantalla.h"
#include "../headers/constantes.h"
#include "../headers/func_consola.h"
#include "../headers/prototipos.h"


/************************Desarollo del prog pcpal************************************/

int main (int argc, char *argv[]){
	/*comienzo de declaracion de variables globales*/
	int iInstruccion;
	char sSectores[1024]="\0";
	t_log *log =  log_create("Runner", LOG, DEBUG | INFO | WARNING, M_CONSOLE_DISABLE);
	int iSocket, iSectorInicial=0, iSectorFinal=0, iResultado=1, iCantSectoresBorrados, iCantSectoresNoBorrados;
	char sSectoresBorrados[1024], sSectoresNoBorrados[1024];
	int iPosicionCabezal;

	/*fin de la declaracion de variables globales*/


	if (argc !=2){
			printf("Error en el ingreso de parametros de ejecucion ./PPD_CONSOLA <PUERTO>");
			log_error(log, NOMBREPROCESO, "Message error: %s", "Error en la ejecucion del programa ingreso mal los parametros");
			log_destroy(log);
			exit(1);

	}//fin del argc

	iSocket= fPrepararSocket_UN(log, NOMBREPROCESO);
    sleep(4);
	fConectar_UN(iSocket, NOMBREPROCESO,log, argv[1]);
	memset(sSectoresBorrados,'\0', 1024);
	memset(sSectoresNoBorrados,'\0', 1024);

	fflush(stdin);
	pMenu();

	printf("\n");
	scanf("%d", &iInstruccion);
	while(iInstruccion != 4){
		switch(iInstruccion){

		    case 1:/*Imprimo la posicion del cabezal */
		    	printf("*1:-Info\n");
		    	if(!fAtenderPosicionCabezal(iSocket, &iPosicionCabezal, log)){
		    		log_error(log, NOMBREPROCESO, "Message error: %s", "Error en la atencion en el pedido del cabezal");

		    	}//fin del if

		    	printf("La posicion del cabezal es:%d\n", iPosicionCabezal);
		    	printf("Aprete cualquier tecla para volver al menu principal\n");
		    	fflush(stdin);
                getchar();
		     break;
		    case 2:/*Borro los sectores que quiero borrar*/
		    	do{
		    	  printf("*2:-CLEAN\n");
		    	  printf("Ingrese el sector desde el cual quiere borrar\n");
		    	  scanf("%d\n", &iSectorInicial);
		    	  printf("Ingrese el sector hasta el cual quiere borrar\n");
		    	  scanf("%d\n", &iSectorFinal);
		    	  iResultado=fVerificaSectores(iSectorInicial,iSectorFinal);
                }while(iResultado);
		    	if(!fAtenderClean(iSocket, iSectorInicial, iSectorFinal, sSectoresBorrados, sSectoresNoBorrados, &iCantSectoresBorrados, &iCantSectoresNoBorrados,log)){
		    		    exit(1);
		    	}//fin del if
                printf("Se borraron los sectores:%s\n", sSectoresBorrados);
                if(iCantSectoresNoBorrados >0){
                	printf("No Se borraron los sectores:%s\n", sSectoresNoBorrados);
                }
		    	printf("Aprete cualquier tecla para volver al menu principal\n");
		    	fflush(stdin);
		    	getchar();
		     break;
		    case 3:/*Imprime la informacion traceada */
		    	do{
		    	 printf("*3:-TRACE\n");
		    	 printf("Ingrese los sectores de los cuales necesita saber la informacion\n");
		    	 printf("Ingreselos en el formato (sector1,sector2,sector3,sector4,sector5)\n");
		    	 scanf("%[^\t\n]",sSectores);
		    	 iResultado=fVerificarCadena(sSectores);
		    	  if (iResultado ==1){
		    	      printf("Estan mal ingresados los sectores que desea obtener\n");
		    	      printf("\nAprete cualquier tecla para volver al menu principal\n");
		    	  }//fin del if

                  if(iResultado == 2){
		    	      printf("La cantidad de sectores ingresados supera los 5");
		    	      printf("\nAprete cualquier tecla para volver al menu principal\n");
		    	  }//fin del if

		    	  if ((iResultado == 1) || (iResultado == 2)){
		    	     fflush(stdin);
		    	     getchar();
		    	     system("clear");
		    	  }
		    	}while(iResultado);
		    	if(!fAtenderTrace(iSocket,sSectores,log)){
		    		exit(1);
		    	}

		    	printf("Aprete cualquier tecla para volver al menu principal\n");
		    	fflush(stdin);
		    	getchar();
		     break;

		}//fin del swich


	}//fin del while


return 0;
}
